
# -*- coding:UTF-8 -*-
# 练习1：华氏温度转换为摄氏温度
# f = float(input('请输入华氏温度：'))
# c = (f -32)/1.8
# print('%.1f华氏度 = %.1f摄氏度' % (f,c))


# 练习3：输入年份判断是不是闰年。
# year = int(input('请输入年份：'))
# is_leap = year %4 ==0 and year %100 !=0 or year % 400 == 0
# print(is_leap)

# 练习4：if/else
# x = float(input('x='))
# if x > 1 :
# 	y = 3 * x -5
# elif x >= -1:
# 	y = x +3
# else:
# 	y = 5 * x + 3
# print('f(%.2f) = %.2f'  % (x,y)) 

# 练习5：输出乘法口诀表(九九表)
# for i in range(1,10):
# 	for j in range(1,i+1):
# 		print('%d * %d = %d' % (i,j,i*j),end = '\t')
# 	print()


# 练习6：输入两个正整数，计算它们的最大公约数和最小公倍数。
# x = int(input('x='))
# y = int(input('y='))
# z = min(x,y)
# max = 1
# for i in range(1,z+1):
# 	if x%i ==0 and y%i ==0:
# 		max = i
# print('%d和 %d最大公约数为：%d' % (x,y,max) )


# for i in range(1,x*y):
# 	if i%x ==0 and i%y ==0:
# 		min = i
# 		break
# print('%d和 %d最小公倍数为：%d' % (x,y,min) )

# if x > y:
# 	x,y = y,x

# for factor in range(x,0,-1):
# 	if x % factor == 0 and y % factor ==0:
# 		print('%d和 %d最大公约数为：%d' % (x,y,factor))
# 		print('%d和 %d最小公倍数为：%d' % (x,y,x*y//factor))
# 		break


# *
# **
# ***
# ****
# *****

# row = int(input('请输入行数：'))
# for i in range(row+1):
# 	print('*'*i)

# for i in range(row+1):
# 	print(('%*s') % (row,'*'*i))


#      *
#     ***
#    *****
#   *******
#  *********
# ***********
# for i in range(row+1):
# 	print(' '*(row-i)+'*'*(2*i -1))


# 找出1~9999之间的所有完美数
# 完美数是除自身外其他所有因子的和正好等于这个数本身的数
# 例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
# for i in range(2,10000):
# 	sum = 1
# 	for j in range(2,i):
# 		if i % j == 0:
# 			sum += j
# 	if sum == i:
# 		print('完美数：',i)

a, b = 5, 10
print('%d * %d = %d' % (a, b, a * b))
a, b = 5, 10
print('{0} * {1} = {2}'.format(a, b, a * b))
a, b = 5, 10
print(f'{a} * {b} = {a * b}')  # python 3.6以后版本支持

import sys
f = [x for x in range(1, 10)]
print(f)
f = [x + y for x in 'ABCDE' for y in '123456']
print(f)
# 用列表的生成表达式语法创建列表容器
# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x ** 2 for x in range(1, 100)]
print(sys.getsizeof(f))  # 查看对象占用内存的字节数
print(f)
# 请注意下面的代码创建的不是一个列表而是一个生成器对象
# 通过生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 100))
print(sys.getsizeof(f))  # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
    print(val)
